Skip to main content

Middleware

Esta documentación detalla los middlewares utilizados en la aplicación.

Middleware de Auditoría de Tablas

Descripción

Este middleware registra la auditoría de las operaciones realizadas en las tablas de la base de datos.

Funcionalidad

  • Registra la auditoría de las operaciones realizadas en las tablas de la base de datos.
  • Utiliza los datos proporcionados en la solicitud para crear registros de auditoría.
  • Captura la dirección IP y el agente de usuario del cliente que realizó la solicitud.

Código

const { createAuditTable } = require('../controllers/auditoria.controller');

const auditTables = async (req, res, next) => {
try {
const datos = req.datos;
const direccionIp = req.ip || req.connection.remoteAddress;
const agenteUsuario = req.get('user-agent') || 'unknown';
await createAuditTable(req, datos, direccionIp, agenteUsuario);
} catch(error) {
throw new Error("Ocurrió un error en el servidor.");
}
next();
};

module.exports = { auditTables };

Middleware de Auditoría de Inicio de Sesión

Descripción

Este middleware registra la auditoría de los inicios de sesión de los usuarios en la aplicación.

Funcionalidad

  • Registra la auditoría de los inicios de sesión de los usuarios.
  • Captura el nombre de usuario, el éxito del inicio de sesión, el token de autenticación, la dirección IP y el agente de usuario del cliente que realizó el inicio de sesión.

Código

const auditLogin = async (req, res) => {

try{
const nombreUsuario = req.body.nombreUsuario;
const exito = req.exito;
const token = req.token;
const direccionIp = req.ip || req.connection.remoteAddress;
const agenteUsuario = req.get('user-agent') || 'unknown';
await createAuditLogin(req, res, nombreUsuario, exito, token, direccionIp, agenteUsuario);

}catch(error) {
throw new Error("Ocurrió un error en el servidor.");
}
};

Middleware de Auditoría de Cierre de Sesión

Descripción

Este middleware actualiza el registro de auditoría al cerrar sesión de un usuario en la aplicación.

Funcionalidad

  • Actualiza el registro de auditoría al cerrar sesión de un usuario.
  • Utiliza el token de autenticación proporcionado en la solicitud para identificar al usuario que cierra sesión.

Código

const auditLogout = async (req, res) => {


try{
const token = req.params.token;

await updateAuditLogin(req, res, token);

}catch(error) {
throw new Error("Ocurrió un error en el servidor.");
}
};


module.exports = { auditTables, auditLogin, auditLogout };

Middleware de Autenticación de Token

Descripción

Este middleware verifica la validez de un token de autenticación JWT enviado en el encabezado de la solicitud.

Funcionalidad

  • Extrae el token de autenticación del encabezado de la solicitud.
  • Verifica la validez del token utilizando una clave secreta.
  • Si el token es válido, añade el objeto de usuario decodificado a la solicitud (req.user) y pasa al siguiente middleware.
  • Si el token no es válido o no está presente, devuelve un error de acceso denegado.

Código

    const jwt = require('jsonwebtoken');

function authenticateToken(req, res, next) {
const token = req.header('Authorization').split(" ")[1];
if (!token) return res.status(401).json({ message: 'Acceso denegado' });

jwt.verify(token, 'secret_key', (err, user) => {
if (err) return res.status(403).json({ message: 'Token inválido' });
req.user = user;
next();
});
}

Middleware de Autorización de Roles

Descripción

Este middleware verifica si el usuario tiene los roles necesarios para acceder a una ruta específica.

Funcionalidad

  • Verifica si el rol del usuario (extraído del objeto req.user) coincide con al menos uno de los roles especificados.
  • Si el usuario tiene permisos, permite el acceso a la ruta.
  • Si el usuario no tiene los permisos necesarios, devuelve un error de permisos insuficientes.

Código

    function authorizeRoles(roles) {
return (req, res, next) => {
if (!roles.includes(req.user.rol)) {
return res.status(403).json({ message: 'No tienes permisos para acceder a esta ruta' });
}
next();
};
}

module.exports = { authenticateToken, authorizeRoles};